package top.jianx.music.util;

import top.jianx.music.enums.MusicProvider;

import java.text.DecimalFormat;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import java.util.stream.Stream;

/**
 * 当前项目的服务工具类
 */
public class JtopMusicUtil {
    private static final String TAG = JtopMusicUtil.class.getSimpleName();

    private static final int SIZETYPE_B = 1; // 获取文件大小单位为B的double值
    private static final int SIZETYPE_KB = 2; // 获取文件大小单位为KB的double值
    private static final int SIZETYPE_MB = 3; // 获取文件大小单位为MB的double值
    private static final int SIZETYPE_GB = 4; // 获取文件大小单位为GB的double值
    private static final int SIZETYPE_TB = 5; // 获取文件大小单位为TB的double值
    private static final int SIZETYPE_PB = 6; // 获取文件大小单位为PB的double值
    private static final int SIZETYPE_EB = 7; // 获取文件大小单位为EB的double值

    /**
     * 获取提供music的平台和api对应字典
     * @return
     */
    public static List<Map<String, String>> listDicData() {

        MusicProvider[] values = MusicProvider.values();

        List<Map<String, String>> maps = Stream.of(values).map(provider -> {
            Map<String, String> map = new HashMap<>();
            map.put("lable", provider.toString());
            map.put("value", provider.getMusicApiClass().getCanonicalName());
            return map;
        }).collect(Collectors.toList());

        return maps;
    }

    /**
     * 字节转kb/mb/gb
     * @param size
     * @return
     */
    public static String getPrintSize(long size) {
        //如果字节数少于1024，则直接以B为单位，否则先除于1024，后3位因太少无意义
        if (size < 1024) {
            return String.valueOf(size) + "B";
        } else {
            size = size / 1024;
        }
        //如果原字节数除于1024之后，少于1024，则可以直接以KB作为单位
        //因为还没有到达要使用另一个单位的时候
        //接下去以此类推
        if (size < 1024) {
            return String.valueOf(size) + "KB";
        } else {
            size = size / 1024;
        }
        if (size < 1024) {
            //因为如果以MB为单位的话，要保留最后1位小数，
            //因此，把此数乘以100之后再取余
            size = size * 100;
            return String.valueOf((size / 100)) + "."
                    + String.valueOf((size % 100)) + "MB";
        } else {
            //否则如果要以GB为单位的，先除于1024再作同样的处理
            size = size * 100 / 1024;
            return String.valueOf((size / 100)) + "."
                    + String.valueOf((size % 100)) + "GB";
        }
    }

}
